<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>变量的赋值机制</title>
</head>
<body>
    <script>
        // 变量的赋值
        // 先在自己的作用域内部查找 如果有直接赋值 
        // 如果没有自动到父作用域查找 父作用域有 那么就使用 停止查找
        // 父作用域如果没有再往上到父级 直到 全局作用域  


        // 那么就把这个变量定义为全局变量 再进行赋值 

        // var n = 100;
        // function fn1(){
        //      var n = 200;
        //     console.log('前',n);
        //     n = 500
        //     console.log('后',n);
        // }
        // // console.log('全局',n);
        // fn1()
        // console.log('全局后',n);


        // var a=b=10;
        // a = 20;
        // b = 20;
        //console.log(a)
        //console.log(b)

        //预解析 
        // 仅仅是声明一个全局变量a 

        //执行代码 
        // 1. b = 10 标准的变量赋值 
        // 这时候 全局没有b 那么b当做了一个全局变量 并赋值 
        // 2. a = b
        
        
        // var a=b;
        // a = 20;
        // b = 20;
        // console.log(a)
        // console.log(b)

        // 预解析 
        // 声明 a 是一个全局变量
        

        //执行 
        //a=b
        // 先访问b 再赋值a 
        // 访问b的时候 因为b 不存在 直接报错

        // var n = 100;
        function fn5(){
            // var n = 200;
            n = 500;
        }
        fn5()
        console.log(n)
    </script>
</body>
</html>